<?php

/**
 * This is the model class for table "produto".
 *
 * The followings are the available columns in table 'produto':
 * @property string $id
 * @property string $especie_id
 * @property string $tipo_id
 * @property string $variedade_id
 * @property string $grupo_id
 * @property string $tabuleiro_id
 * @property string $maquina_sementeira_id
 * @property string $substrato_id
 * @property string $semente_id
 * @property string $tempo_viveiro_id
 * @property string $resistencia_tolerancia_id
 * @property string $fornecedor_id
 * @property string $cor
 * @property string $profundidade
 * @property string $pente
 * @property string $rolo
 * @property string $nome_cientifico
 * @property string $recomendacoes
 * @property string $caracteristicas_agronomicas
 * @property string $caracteristicas_comerciais
 * @property string $data_plantacao
 * @property string $created_at
 * @property string $updated_at
 *
 * The followings are the available model relations:
 * @property Especie $especie
 * @property Tipo $tipo
 * @property Variedade $variedade
 * @property ProdutoPreco[] $produtoPrecos
 */
class Produto extends CActiveRecord {

    public $especie_search;
    public $tipo_search;
    public $variedade_search;

    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Produto the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return 'produto';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('especie_id, tipo_id, variedade_id, grupo_id, tabuleiro_id, maquina_sementeira_id, substrato_id, semente_id, tempo_viveiro_id, resistencia_tolerancia_id, fornecedor_id, cor, profundidade, pente, rolo, recomendacoes, caracteristicas_agronomicas, caracteristicas_comerciais, data_plantacao', 'required'),
            array('especie_id, tipo_id, variedade_id, grupo_id, tabuleiro_id, maquina_sementeira_id, substrato_id, semente_id, tempo_viveiro_id, resistencia_tolerancia_id, fornecedor_id', 'length', 'max' => 10),
            array('cor', 'length', 'max' => 7),
            array('profundidade, pente, rolo', 'length', 'max' => 20),
            array('nome_cientifico', 'length', 'max' => 80),
            array('created_at, updated_at', 'safe'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('id, especie_id, tipo_id, variedade_id, grupo_id, tabuleiro_id, maquina_sementeira_id, substrato_id, semente_id, tempo_viveiro_id, resistencia_tolerancia_id, fornecedor_id, cor, profundidade, pente, rolo, nome_cientifico, recomendacoes, caracteristicas_agronomicas, caracteristicas_comerciais, data_plantacao, created_at, updated_at,especie_search,tipo_search,variedade_search,precos', 'safe', 'on' => 'search'),
            array('updated_at', 'default',
                'value' => new CDbExpression('NOW()'),
                'setOnEmpty' => false, 'on' => 'update'),
            array('created_at,updated_at', 'default',
                'value' => new CDbExpression('NOW()'),
                'setOnEmpty' => false, 'on' => 'insert')
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'sementeiras' => array(self::HAS_MANY, 'Sementeira', 'id_produto'),
            'especie' => array(self::BELONGS_TO, 'Especie', 'especie_id'),
            'tipo' => array(self::BELONGS_TO, 'Tipo', 'tipo_id'),
            'variedade' => array(self::BELONGS_TO, 'Variedade', 'variedade_id'),
            'precos' => array(self::MANY_MANY, 'Preco', 'produto_preco(produto_id,preco_id)'),
            'tabuleiro' => array(self::MANY_MANY, 'Tabuleiro', 'tabuleiro_produto(id_produto,id_tabuleiro)'),
            'semente' => array(self::MANY_MANY, 'Semente', 'semente_produto(id_semente,id_produto)'),
            'fitofarmacos' => array(self::MANY_MANY, 'Fitofarmaco', 'produto_fitofarmaco(produto_id,fitofarmaco_id)'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => 'ID',
            'especie_id' => 'Especie',
            'tipo_id' => 'Tipo',
            'variedade_id' => 'Variedade',
            'grupo_id' => 'Grupo',
            'tabuleiro_id' => 'Tabuleiro',
            'maquina_sementeira_id' => 'Maquina Sementeira',
            'substrato_id' => 'Substrato',
            'semente_id' => 'Semente',
            'tempo_viveiro_id' => 'Tempo Viveiro',
            'resistencia_tolerancia_id' => 'Resistencia Tolerancia',
            'fornecedor_id' => 'Fornecedor',
            'cor' => 'Cor',
            'profundidade' => 'Profundidade',
            'pente' => 'Pente',
            'rolo' => 'Rolo',
            'nome_cientifico' => 'Nome Cientifico',
            'recomendacoes' => 'Recomendacoes',
            'caracteristicas_agronomicas' => 'Caracteristicas Agronomicas',
            'caracteristicas_comerciais' => 'Caracteristicas Comerciais',
            'data_plantacao' => 'Data Plantacao',
            'created_at' => 'Created At',
            'updated_at' => 'Updated At',
            'especie_search' => 'Especie',
            'tipo_search' => 'Tipo',
            'variedade_search' => 'Variedade',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search() {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('t.id', $this->id, true);
        $criteria->compare('especie.descricao', $this->especie_search, true);
        $criteria->compare('tipo.descricao', $this->tipo_search, true);
        $criteria->compare('variedade.descricao', $this->variedade_search, true);
        $criteria->compare('grupo_id', $this->grupo_id, true);
        $criteria->compare('t.tabuleiro_id', $this->tabuleiro_id, true);
        $criteria->compare('maquina_sementeira_id', $this->maquina_sementeira_id, true);
        $criteria->compare('substrato_id', $this->substrato_id, true);
        $criteria->compare('semente_id', $this->semente_id, true);
        $criteria->compare('tempo_viveiro_id', $this->tempo_viveiro_id, true);
        $criteria->compare('resistencia_tolerancia_id', $this->resistencia_tolerancia_id, true);
        $criteria->compare('t.fornecedor_id', $this->fornecedor_id, true);
        $criteria->compare('cor', $this->cor, true);
        $criteria->compare('profundidade', $this->profundidade, true);
        $criteria->compare('pente', $this->pente, true);
        $criteria->compare('rolo', $this->rolo, true);
        $criteria->compare('nome_cientifico', $this->nome_cientifico, true);
        $criteria->compare('recomendacoes', $this->recomendacoes, true);
        $criteria->compare('caracteristicas_agronomicas', $this->caracteristicas_agronomicas, true);
        $criteria->compare('caracteristicas_comerciais', $this->caracteristicas_comerciais, true);
        $criteria->compare('data_plantacao', $this->data_plantacao, true);
        $criteria->compare('t.created_at', $this->created_at, true);
        $criteria->compare('t.updated_at', $this->updated_at, true);
        $criteria->together = true;
        $criteria->with = array("sementeiras", "tabuleiro", "especie", "tipo", "variedade", "semente", "precos");

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => array(
                'attributes' => array(
                    'especie_search' => array(
                        'asc' => 'especie.descricao',
                        'desc' => 'especie.descricao DESC',
                    ),
                    'tipo_search' => array(
                        'asc' => 'tipo.descricao',
                        'desc' => 'tipo.descricao DESC',
                    ),
                    'variedade_search' => array(
                        'asc' => 'variedade.descricao',
                        'desc' => 'variedade.descricao DESC',
                    ),
                    '*',
                ),
            ),
        ));
    }

}
